const { AsyncSeriesHook } = require('tapable');
const hook = new AsyncSeriesHook(['name', 'age']);


// 异步串行执行
// console.time('cost')
// hook.tapAsync('1', (name, age, callback) => {
//   setTimeout(() => {
//     console.log(1, name, age);
//     callback()
//   }, 1000)
// })

// hook.tapAsync('2', (name, age, callback) => {
//   setTimeout(() => {
//     console.log(2, name, age);
//     callback()
//   }, 2000)
// })

// hook.tapAsync('3', (name, age, callback) => {
//   setTimeout(() => {
//     console.log(3, name, age);
//     callback()
//   }, 3000)
// })

// hook.callAsync('zb', 28, (err) => {
//   console.log(err, 'err', 'callback');
//   console.timeEnd('cost')
// })


hook.tapPromise('1', (name, age) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(1, name, age)
      resolve()
    }, 1000)
  })
})

hook.tapPromise('2', (name, age) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(2, name, age);
      resolve(2)
    }, 2000)
  })
})

hook.tapPromise('3', (name, age) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log(3, name, age);
      resolve()
    }, 3000)
  })
})

hook.promise('zb', 28).then(result => {
  console.log(result);
  console.timeEnd('cost')
})

